/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package InterfaceGUI;

import data.*;
import java.text.ParseException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Container.*;
import javax.swing.text.MaskFormatter;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.Vector;


public class kalenderAnlegen {

//Deklarierung der Variablen
JButton abbrechen;
JButton anlegen;
JFrame frame;
JTextField bezeichnungField;
JComboBox besitzer;
DefaultComboBoxModel comboBoxModel1;
JLabel bezeichnungLabel;
JLabel besitzerLabel;
JLabel zugriffsberechtigteLabel;
JList listZugriffsberechtigte;
JScrollPane scroller;

public static void main(String[] args) {
        kalenderAnlegen gui = new kalenderAnlegen();
        gui.kalenderAnlegen();
        }

//Methode welche den Frame, mitsamt den Panels und Komponenten erstellt
public void kalenderAnlegen(){

//ein neuer Frame wird erstellt
frame = new JFrame ("Kalender anlegen");

//ein neues Panel wird erstellt
JPanel kalenderAnlegenPanel = new JPanel();

//ein neues Gridbaglayout wird erstellt
GridBagLayout gbl = new GridBagLayout();

//dem buchungAnlegenPanel wird das neue Gridbaglayout zugewiesen
kalenderAnlegenPanel.setLayout(gbl);

//es werden neue GridBagConstraints erstellt
GridBagConstraints constraints = new GridBagConstraints();

// Titel Label und Titel Textfeld erstellen.
bezeichnungLabel= new JLabel("Bezeichnung*:");
constraints.insets = new Insets( 9,9,9,9 );
constraints.anchor = GridBagConstraints.WEST;
constraints.weightx = 0;
kalenderAnlegenPanel.add(bezeichnungLabel, constraints);

bezeichnungField = new JTextField(27);
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 1;
constraints.fill = GridBagConstraints.NONE;
kalenderAnlegenPanel.add(bezeichnungField, constraints);

// Werktyp Label und Werktyp Combobox erstellen.
besitzerLabel= new JLabel("Besitzer:");
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.fill = GridBagConstraints.NONE;
kalenderAnlegenPanel.add(besitzerLabel, constraints);

try {
    // Zunächst benötigen wir eine Verbindung mit der Verwaltung.
    Verwaltung verwaltung =
        (Verwaltung)Naming.lookup("rmi:/localhost:1099/DRM");


    Vector<Person> ergebnis1 = verwaltung.getAll_Person();
    Vector person = new Vector();

//    Hier wird dem Vector 'person' das Objekt Person mit Person mit den Elementen Vorname und Name
//    übergeben und der Combobox 'besitzer' hinzugefügt
    for ( Person test : ergebnis1 ) {
        if (test != null ) {
                person.add(test.get_vorname()+ " " + test.get_nachname());
        }
    }

    //Combobox anlegen
    besitzer = new JComboBox(person);
    Dimension groesseBesitzer = new Dimension(300, 25);
    besitzer.setPreferredSize(groesseBesitzer);
    constraints.gridwidth = GridBagConstraints.REMAINDER;
    constraints.weightx = 1;
    constraints.fill = GridBagConstraints.NONE;
    kalenderAnlegenPanel.add(besitzer, constraints);


    //Herausgeber Label erstellen
    zugriffsberechtigteLabel = new JLabel("Zugriffsberechtigte:");
    constraints.insets = new Insets(46,9,0,0);
    constraints.gridwidth = 1;
    constraints.weightx = 0;
    constraints.fill = GridBagConstraints.NONE;
    kalenderAnlegenPanel.add(zugriffsberechtigteLabel, constraints);

    Vector<Person> ergebnis2 = verwaltung.getAll_Person();
    Vector zugriffsberechtigte = new Vector();
    Vector PersonID = new Vector();

//    Hier wird dem Vector 'zugriffsberechtigte' das Objekt Person mit den Elementen Vorname und Name
//    übergeben und der JList 'zugriffsberechtigte' hinzugefügt
    for ( Person test : ergebnis2 ) {
        if (test != null ) {
                zugriffsberechtigte.add(test.get_vorname()+ " " + test.get_nachname());
        }
    }
    //JList mit Scrollbar für die Herausgeber erstellen
    listZugriffsberechtigte = new JList(zugriffsberechtigte);
    listZugriffsberechtigte.setSelectionMode(
    ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
    scroller = new JScrollPane(listZugriffsberechtigte);
    listZugriffsberechtigte.setSelectedIndex(2);
    scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    constraints.gridwidth = GridBagConstraints.REMAINDER;
    constraints.weightx = 1;
    constraints.fill = GridBagConstraints.NONE;
    kalenderAnlegenPanel.add(scroller, constraints);

    }
    catch (MalformedURLException murle) {
            System.out.println("MalformedURLException");
            System.out.println(murle);
    }
    catch (RemoteException re) {
            System.out.println("RemoteException");
            System.out.println(re);
    }
    catch (NotBoundException e) {
            System.out.println("NotBoundException");
            System.out.println(e);
    }
    catch (NullPointerException np) {
            System.out.println("NullPointerException");
            System.out.println(np);
    }

//Button anlegen erstellen + ActionListener hinzufügen
anlegen = new JButton("anlegen");
constraints.insets = new Insets(56,9,0,0);
constraints.gridwidth = 1;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.NONE;
kalenderAnlegenPanel.add(anlegen, constraints);
anlegen.addActionListener(new anlegenListener());

//Button abbrechen erstellen + ActionListener hinzufügen
abbrechen = new JButton("abbrechen");
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.weightx = 0;
constraints.weighty = 0;
constraints.fill = GridBagConstraints.NONE;
kalenderAnlegenPanel.add(abbrechen, constraints);
abbrechen.addActionListener(new abbrechenListener());

//Framegröße festlegen
frame.getContentPane().add(kalenderAnlegenPanel);
frame.setSize(500, 450);
frame.setResizable(false);
frame.setVisible(true);

}

//Button Events zuordnen (anlegen)
class anlegenListener implements ActionListener{

    public void actionPerformed(ActionEvent event){

    int antwort = JOptionPane.showConfirmDialog(frame, "Wollen Sie diesen Kalender anlegen?",
    "", JOptionPane.YES_NO_OPTION);
    if (antwort == JOptionPane.YES_OPTION){

    //auslesen der einzelnen Strings der Felder. Diese werden dann in der Variable Ergebnisfelder zusammengefasst
    String bezeichnung = bezeichnungField.getText();
    String ausgewaehlterBesitzer = (String)besitzer.getSelectedItem();

//    String telefon = telefonField.getText();
//    String email = emailField.getText();
//    String raum = raumField.getText();
//    String passwort = passwortField.getText();
//                ergebnisFelder = (vorname + nachname + telefon + email + raum + passwort);
//                JOptionPane.showMessageDialog(frame, ergebnisFelder);


        //Überprüfen ob alle Pflichtfelder ausgefüllt sind
        if (bezeichnung.equals("")) {
            JOptionPane.showMessageDialog(frame,"Bitte alle Pflichtfelder ausfüllen!");

        //Hier muss noch eingebaut bwerden dass der Prozess nicht weiterläuft

        }
//
                try {
                    // Zunächst benötigen wir eine Verbindung mit der Verwaltung.
                    Verwaltung verwaltung =
                            (Verwaltung) Naming.lookup("rmi:/localhost:1099/DRM");

                    /*
                     * Wenn wir hier ankommen, dann besteht eine Verbinung zum Server.
                     * Wäre die Verbindung nicht zustande gekommen, so wäre eine Exception
                     * ausgeworfen worden und das Programm wäre in den entsprechenden
                     * Catch-Block (s.u.) gesprungen.
                     */
                    System.out.println("Verbindung hergestellt...");

                    Vector<Person> ergebnis1 = verwaltung.getAll_Person();
                    Vector person = new Vector();

                    //Hier wird Jedes Objekt des Vectors auf Nachname, Vorname überprüft und mit dem
                    //zuvor ausgelesenen String der Combobox verglichen. Wird die entsprechende Person
                    //der Combobox gefunden wird von dieser die ID ausgelesen.
                    for ( Person test : ergebnis1 ) {
                        if (test != null ) {
                            String Name  = test.get_vorname() + " " + test.get_nachname();
                            if (Name.equals(ausgewaehlterBesitzer)) {
                                int personID = test.get_person_id();
                                int besitzer = personID;

                                // Von der Verwaltung bekommen wir das Bank-Objekt.
                                //Bank bank = verwaltung.getBank();
                                // Hier wird entsprechend ein neuer Kalender angelegt.
                                Kalender x = verwaltung.createKalender(1, bezeichnung, besitzer, 2);

                            }
                        }
                    }



                } catch (MalformedURLException murle) {
                    System.out.println("MalformedURLException");
                    System.out.println(murle);
                } catch (RemoteException re) {
                    System.out.println("RemoteException");
                    System.out.println(re);
                } catch (NotBoundException e) {
                    System.out.println("NotBoundException");
                    System.out.println(e);
                } catch (NullPointerException np) {
                    System.out.println("NullPointerException");
                    System.out.println(np);
                }

    }
    JOptionPane.showMessageDialog(frame,"Kalender angelegt!");
        frame.setVisible(false);
//  }
//    else if (antwort == JOptionPane.NO_OPTION)
//    frame.setVisible(false);
//  }
}
}
//Button Events zuordnen (abbrechen)
class abbrechenListener implements ActionListener{

    public void actionPerformed(ActionEvent event){

      int antwort = JOptionPane.showConfirmDialog(frame, "Wollen Sie den Vorgang wirklich beenden?",
      "", JOptionPane.YES_NO_OPTION);
      if (antwort == JOptionPane.YES_OPTION)
      frame.setVisible(false);
    }
}}